package com.ruoyi.system.service;

import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@Component
public class AgroAIService {

    @Value("${agroai.api-key}")
    private String apiKey;

    @Value("${agroai.app-id}")
    private String appId;

    /**
     * 【修正】1. 新建对话 - 此接口仅用于获取conversation_id，不应包含query参数
     * 根据平台界面，此接口可能只需要app_id。请务必以官方文档为准。
     */
    public String createConversation() throws IOException {
        // 构建请求体 - 根据平台流程，此接口很可能只需要app_id
        JSONObject jsonBody = new JSONObject();
        jsonBody.set("app_id", appId); // 关键修正：只设置app_id，不设置query

        HttpResponse response = HttpRequest.post("https://qianfan.baidubce.com/v2/app/conversation")
                .header("Content-Type", "application/json")
                .header("Authorization", apiKey)
                .body(jsonBody.toString())
                .execute();

        // 【重要】打印原始响应，用于调试和确认JSON结构
        String responseBody = response.body();
        System.out.println("【新建对话响应】: " + responseBody); // 添加此行打印日志

        if (response.isOk() && StrUtil.isNotBlank(responseBody)) {
            cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(responseBody);
            // 关键修正：根据打印出的日志，找到conversation_id在JSON中的正确路径
            // 常见字段是 "conversation_id" 或 "id"，请根据实际响应调整！
            return jsonObject.getStr("conversation_id");
            // 如果上面不行，可以尝试: return jsonObject.getStr("id");
        } else {
            throw new IOException("创建会话失败，状态码: " + response.getStatus() + ", 响应体: " + responseBody);
        }
    }

    /**
     * 【修正】2. 执行对话 - 此接口需要完整的参数
     */
    public String sendMessage(String conversationId, String userMessage) throws IOException {
        // 1. 构建请求体 - 必须包含平台要求的三个参数
        Map<String, Object> requestBody = new HashMap<>();
        requestBody.put("app_id", appId);
        requestBody.put("query", userMessage); // 用户的问题
        requestBody.put("conversation_id", conversationId); // 来自createConversation的返回值
        requestBody.put("stream", false);

        // 2. 发送请求到“对话”接口（注意URL不同！）
        HttpResponse response = HttpRequest.post("https://qianfan.baidubce.com/v2/app/conversation/runs") // 注意是 /runs 端点
                .header("Content-Type", "application/json")
                .header("Authorization", apiKey)
                .body(JSONUtil.toJsonStr(requestBody))
                .execute();

        // 【重要】打印原始响应，用于调试和确认JSON结构
        String responseBody = response.body();
        System.out.println("【执行对话响应】: " + responseBody); // 添加此行打印日志

        if (response.isOk() && StrUtil.isNotBlank(responseBody)) {
            cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(responseBody);
            // 关键修正：根据打印出的日志，找到AI回复内容在JSON中的正确路径
            // 常见字段是 "result" 或 "answer"，请根据实际响应调整！
            return jsonObject.getStr("answer");
            // 如果上面不行，可以尝试: return jsonObject.getStr("answer");
        } else {
            throw new IOException("发送消息失败，状态码: " + response.getStatus() + ", 响应体: " + responseBody);
        }
    }
}